/*
    Copyright 2007-2008 Adobe Systems Incorporated
    Copyright 2018 Chris Cox
    Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
    or a copy at http://stlab.adobe.com/licenses.html )
    

    Not all compilers support <cstdint> yet, and some don't even have <stdint.h>
    So, we have to do our own type definitions.
*/


/******************************************************************************/

#if 0

    // for platforms that don't include the C99 header stdint.h
    
    // if your platform does not include stdint.h, please edit the #if above
    // to include your platform (and remember that it has to work elsewhere as well)

    template<bool P, typename T, typename E>
    struct if_;

    template<typename T, typename E>
    struct if_<true, T, E> { typedef T type; };

    template<typename T, typename E>
    struct if_<false, T, E>{ typedef E type; };

    typedef signed char int8_t;
    typedef unsigned char uint8_t;

    typedef signed short int16_t;
    typedef unsigned short uint16_t;

    typedef if_<sizeof(int) == 4, int, long>::type int32_t;
    typedef if_<sizeof(unsigned int) == 4, unsigned int, unsigned long>::type uint32_t;

    #if _MSC_VER
        typedef __int64 int64_t;
        typedef unsigned __int64 uint64_t;
    #else
        typedef long long int64_t;
        typedef unsigned long long uint64_t;
    #endif

#else

    // for platforms that do have stdint.h
    
    // if your platform fails to find this header, please edit the #if above
    // to include your platform (and remember that it has to work elsewhere as well)
    
    #include <stdint.h>
    
#endif

/******************************************************************************/
